23

» WarCraft 3 / Выбор сложности!

Похожие вопросы:

ответ
Не юзай TriggerSleepAction и будет тебе счастье. Особенно когда юзаешь глобальные переменные, вполне вероятно, что конфликт
ответ
Name Legion:
первый и второй скрины - ты создаешь юнита "Выбирайте героя" для каждого игрока, потом накидываешь игроку-владельцу выборку. Так понял? ДА ВСЕ ПРАВИЛЬНО
третий и четвертый скрины - это один триггер? ДА
при создании (входе в игровую карту) юнита ты показываешь диалог одному игроку (при входе в эту область) я показываю диалог этому игроку!!!!
пятый скрин - здесь при нажатий диалоговой кнопки ты что-то делаешь. Скорее всего проблема в пике. ДА проблема в пике
дебаг тут не нужен...я и так понимаю где он останавливается а где идет дальше..я хочу узнать как создать этого выбирайте героя, выбрать этого выбирайте героя в этой области где я его создал добавить выбирайте героя в селекции для этого игрока и чтобы эти 2 триггера правильно работали
avuremybe:
я не пойму откуда все эти куски кода
куски...объясняю....первые 2 это идет создание выбирайте героя для всех игроков... 3 4 это один триггер и 5 это отдельный триггер
вот так выглядит он
и вот так для всех остальных игроков
а так выглядит 2 триггер
Хотя не понятно. Где фильтр? Ты хотя бы условием отсеивал, или проверял бы. Сделал бы так, что на каждого пикнутого юнита накидывать на него выбор владельца. где дебаг?
и вот как это сделать...покажи условием
решил вопрос....проблема была в том что я выбирал только что созданного юнита...за счет этого на первые 2 показано что last created unit = выбирайте героя...он думал что только что созданный юнит не герой а выбирайте героя..потому и переключался выбор
теперь в выборе уровня сложности стоит условие
спасибо
ответ
Если запускаемая сложность главы отличается от стандартной, то оставить так, как есть, а если нет - то попытаться считать то, что было записано в предыдущей главе (если не записано - сбросить к стандартной).
Вообще, сама функция не запускает уровень с какой-то сложностью. Она просто задает значение глобальной переменной:
Код функции
function SetNextLevelBJ takes string nextLevel returns nothing
    if (nextLevel == "") then
        set bj_changeLevelMapName = null
    else
        set bj_changeLevelMapName = nextLevel
    endif
endfunction
Если копать глубже, то вся проблема здесь:
Код функций
function CustomVictoryOkBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    if (bj_changeLevelMapName == null) then
        call EndGame( bj_changeLevelShowScores )
    else
        call ChangeLevel( bj_changeLevelMapName, bj_changeLevelShowScores )
    endif
endfunction

function CustomVictoryQuitBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    call EndGame( bj_changeLevelShowScores )
endfunction
Если интересно, откуда все это берется, то нужно посмотреть устройство функции CustomVictoryBJ и все вызовы, следующие из нее.
Чтобы править проблему без создания костылей на кэше, то придется переписать близовскую функцию под себя (без сбрасывания сложности), а потом использовать ее вместо оригинальной в своей кампании (удобства ради можно использовать дефайн на cJass).
ответ
Возможно, эта статья пригодится.

23

» WarCraft 3 / Анимация

Похожие вопросы:

ответ
~8gabriel8:
В РО есть у юнита поля Бой - Атака1 - точка начала атаки/обратный ход броска или как-то так. Так вот это значения для вылета снаряда и момента нанесения урона.
По крайней мере для себя так запомнил в своё время, в действительности могут быть иные определения.
Вот тут нормальные определения:
ответ
~8gabriel8:
Вот есть вариант: xgm.guru/p/wc3/222019?postid=413030#comment28

23

» WarCraft 3 / Проверка карты с jass кодом

Похожие вопросы:

ответ
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_three takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_two takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_one takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
        return false
    endif
    return true
endfunction

function MU_Second_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function MU_Start_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function Trig_MU_Conditions takes nothing returns boolean
    if ( not MU_Start_Conditions() ) then
        return false
    endif
    return true
endfunction

function MU_Venum_Check takes nothing returns boolean
    if ( not ( udg_MU_Venum_counter == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_del takes nothing returns nothing 
    if ( MU_Check_lvl_one() ) then
        call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
        call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
    else
        if ( MU_Check_lvl_two() ) then
            call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
            call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
        else
            if ( MU_Check_lvl_three() ) then
                call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
                call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
            else
                if ( MU_Check_lvl_four() ) then
                    call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
                    call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
endfunction


function Trig_MU_Actions takes nothing returns nothing
    call DestroyTrigger(udg_MU_trig)
    set udg_MU_Venum_counter = GetRandomInt(1, 5)
    set udg_MU_TG = GetAttackedUnitBJ()
    if ( MU_Venum_Check() ) then
        if ( MU_Check_lvl_one() ) then
        call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
        call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
    else
        if ( MU_Check_lvl_two() ) then
            call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
            call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
        else
            if ( MU_Check_lvl_three() ) then
                call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
                call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
            else
                if ( MU_Check_lvl_four() ) then
                    call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
                    call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
    set udg_MU_trig = CreateTrigger()
    call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
    call TriggerAddAction( udg_MU_trig, function MU_del )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_MU takes nothing returns nothing
    set gg_trg_MU = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
    call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
ответ
Кириллицы в пути к JNGP или к карте нету?
ответ
function IsAbilityOnCooldown takes integer a returns boolean
	return IsFlagBitSet(RMem(a+0x20),512)
endfunction

function StartAbilityCooldownFxByAddress takes integer pAbility, real cd returns boolean
	if pAbility < 1 then
		return false
	endif
	set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
	call CallThisCallWith2Args( RMem(RMem(pAbility)+0x3A4) , pAbility, pReserverdIntArg1 )//pStartAbilityCD
	return IsAbilityOnCooldown( pAbility )
endfunction

function StartAbilityCooldownFx takes unit whichUnit, integer abilityId, real cd returns boolean
	local integer pAbility = 0
	if GetUnitAbilityLevel( whichUnit, abilityId  ) == 0 or cd == 0.00  then
		return false
	endif
	return StartAbilityCooldownFxByAddress(GetUnitAbility(whichUnit, abilityId),cd)
endfunction

23

» WarCraft 3 / Способность стаки от атак!

Похожие вопросы:

ответ
Например так, чтобы основная химера не имела яда вообще, а яд накладывали даммики, вот и получится тоже самое (в самых малых требованиях)

23

» WarCraft 3 / Как сделать, чтобы герои получали опыт не на всей карте?

Похожие вопросы:

ответ
Наилучший вариант - писать свою систему опыта.
Еще можешь попробовать отключить общее распределение опыта.
Либо, вот так
Либо, так распределение опыта варкрафт
Либо, так: распределение опыта варкрафт
А еще, вот так: распределение опыта

23

» WarCraft 3 / Не видно иконки спела

Похожие вопросы:

ответ
Rасательно вопроса как добавить в книгу заклинаний больше 12 скиллов - можно добавить книгу в книгу и новой книге сделать ещё несколько скиллов и ещё 1 или несколько книг. В каждую книгу можно ещё по книге и так далее.
Главное - ID приказа у всех книг должны быть разные.

Иконки способностей кольца, когтей и т.д. отображаться не будут, ты можешь отображать скиллы-пустышки, а (только это на всякий случай предложенный вариант!) герою выдавать сам предмет, предварительно вытряхнув из его инвентаря все предметы на пол. После добавления в пустой инвентарь нужного предмета, например когтей - заполняем ещё 4 слота предметами-пустышками, затем даём предмет со способностью "предметы герой", у этой способности для предмета должна стоять галочка "относится к предмету", обязательно. После этого инвентарь снова очистится уже сам, однако добавленный предмет на атаку будет иметь эффект. После чего можно подобрать с пола предметы героя и отдать ему триггерно.

Почему не стоит добавлять способность когтей триггерно? - потому что 2 добавленные одинаковые способности не суммируются. Два одинаковых предмета же суммируются.
Есть ли минусы у вышеописанного способа? - скорее всего удалить добавленный бонус нормально не выйдет. Придётся вытряхать инвентарь удалением способности "предметы герой" у самого героя, а это тот ещё геморрой -восстановить потом всё, что должно было остаться неудалённым.
ответ
Поместить в спеллбук, который запрещен для игрока. Так же с помощью мемхака можно скрывать иконки любых способностей.

23

» WarCraft 3 / Вопрос по моделированию

Похожие вопросы:

ответ
неправильное использование Q/A
ответ
Всё. Понял в чём проблема
ответ
через obj не над там копируються вершины а то и несколько раз и слои слепляются в 1,3ds и через милкшарп,еси напрямую в мделвис то uv будет зекальна по y,а лутше перкинуть через макс(еси есть)
ну полигонам то укладывайся в 10к на супер хд моделей
материал ты не как не перенесешь только текстуру
материалы для вара создаются в warcraft model editor

23

» WarCraft 3 / Способность канал!

Похожие вопросы:

ответ
Поставь в настройках: Цель - юнит и убрать Изображение указателя цели. Так же нужно нужно радиус действия (кажись так оно называется) поставь на 0.
ответ
Тебе нужно изменить у способностей одну строку, которая называется базовый ID приказа (+порядок строк). Просто, если он одинаковый, то срабатывают все неправильно, если у героя все способности канала с одинаковым ID.
ответ
Цепь молний, с отрец уроном.
ответ
Прочитал в другой теме, что это и правда нереально, стандартный ИИ не знает канал.
ответ
orc01, ну она не так называется 'AEpa' - Отравленные стрелы, находится у героев нейтралов. Абилка очень известная, из неё обычно делают все триггерные автокасты, в доте это стрелы хускары, копья энчанты, орб дестроера и глейвы сайленсера. Кароче все автокаст орбы принято делать из этой абилки.
Кстати совсем забыл - еще раз для всех кто не осознал, никак нельзя сменить механику и тип прицела стандартной способности в редакторе обьектов, ну вот никак, ваще никак, совсем никак, невозможно сделать из канала криты, а из критов активку, ни получится добавить к стрелам эффект молнии, а к молотку бурь безмолвие вместо оглушения. Все способности по своему уникальны (не будем считать клонов), исходя из ваших потребностей, выбирайте соответствующую основу.

23

» WarCraft 3 / Способность из доты

Похожие вопросы:

ответ
Очень геморойно, но суть там проста - перемещение плавным перемещением к юниту и атака его, если это крип то герою вручают абилку снижающую урон, а если не крип то абилку повышающую силу атаки (способность боевых когтей), ну собственно и все. Но вот в гуях низя использовать нормально таймеры да и будут утечки с группой и локейшинами, если делать по проще.
Да еще у этой способности в доте есть существенный баг, если атаковать кого и сразу же применить способность - то герой не атакует первого врага в области действия способности, ибо его атака еще не перезарядилась а боносу скорости будет работать только на следующую.
Увы вылечить это можно мемхаком (на гуи исключен) или вторым(дамми) героем, который бы атаковал врагов вместо оригинала.
Можешь попробовать найти jass версии на хайве, вроде скиллы эмбер спирита уже делали.
ответ
IGOREIK, там четыре события на применение способности.
Пробуй разные, выбери, какое подойдёт лучше.
Вариант 8gabriel8 лучше. Немного дополню. Можно найти модель спецэффекта, который применяется во время включения способности. Посмотреть редакторами моделей (War3ME, например), какой там звук используется. И прописать импортированному звуку этот путь.

23

» WarCraft 3 / Что не так с игроками

Похожие вопросы:

ответ
Вот
Мог бы подсказать какие триггеры смотреть. Но я уже нашёл.
Изменил в игровых константах два значения и нейтрально-враждебные больше не убегают.
ответ
Исследования завершают не игроки, а юниты.
ответ
Name Legion:
пробовал через pick every player in all players....произошла ошибка там вместо picked player triggering player надо поставить
ответ
Можно создать допольнительного бота, который будет союзником 1 и 2 игроку, но врагом 3 и 4. ну и собственно дается общий контроль на этого бота.
Игрок - Make игрок 1 treat игрок 2 as an игроки с общими войсками
ответ
каждый игрок имеет свой индекс
это даже гуишники знают
с такими вопросами советую начать с этой статьи

23

» WarCraft 3 / Как сделать юнита не выбираемым?

Похожие вопросы:

ответ
вот, выбирается
так как там нет геометрии (а только источники частиц), то так просто в один клик не рассчитываются границы
надо вручную создавать объект "форма" с нужным радиусом и координатами, в редакторе узлов model editor'а

23

» WarCraft 3 / Проблемы с Текстурами

Похожие вопросы:

ответ
Свершылось... Заработало...
Вот оно.

Описание проверки:
  • проверил в редакторе, он просто вылетает при попытке настройки в РО;
  • переконвертировал в .mdl и осмотрел, все норм;
  • открыл в War3ModelEditore, удалил лишние текстуры, материалы, настроил анимации геосетов;
  • профит.
Если кто не верит, вот скрин.
ответ
Возможно ты пересохранил текстуру в блп-лабе, поставив неправильные настройки альфа-канала при сохранении
ответ
Viktor2, а ты реально импортировал все текстуры (в кол-ве 21шт ) в карту? Если хотя бы одну забыл -модель не будет отображаться.
ответ
Каро, чтобы закрыть вопрос - выбери лучший ответ.
ответ
ENAleksey, ну я же не могу твою модификацию запихнуть в карту.

23

» WarCraft 3 / атака в движении

Похожие вопросы:

ответ
достаточно сделать 2 модели 1 - это верхняя часть юнита до пояса с анимациями атаки и прочего с руками. 2я - модель это нижняя часть юнита от пояса, тобиш ноги с анимкой хотьбы бега и прочего. добавляешь в карту, соединяешь, пишеш триггеры и все готово.
ответ
Нужно чтобы юниты не принадлежали нейтральным игрокам или компьютеру.
ответ
Нашёл решение для тебя.
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе

В общем, берёшь архив из аттача и тупо суёшь папку UI в корень варкрафта. После этого карта будет открываться любым вариантом редактора - как JNGP (любым), так и (даже!) стандартным.
Важно: локальные файлы должны быть разрешены.

Только там такой срач и дичь, что лучше реально своими руками с нуля писать...
ответ
а флаг "не убегает" не варик?
ответ
Ах, я понял чего ты хочешь конкретно сейчас. Чтобы модель смотрела в камеру, словно на экране выбора персонажа? В таком случае ситуация немного упрощается.
Нам больше не нужно хранить текущую матрицу поворота эффекта, ведь мы не производим ее вращение, вместо этого мы высчитывает всю необходимую ориентацию из положения камеры и самого эффекта. Подход, в целом, остается прежним, но для поиска осей ориентации мы теперь будем использовать некоторый вспомогательный вектор, чье направление совпадает с направлением глобальной оси Z, и путем векторного произведения этого вспомогательного вектора на вектор оси X эффекта (получаемый как и прежде p2 - p1) мы получаем вектор ориентации эффекта Y, а векторное произведение X на Y нам даст ось Z эффекта.
Весь процесс можно разжевать на множество абзацев, но делать этого нет смысла. Я проще скину твою карту с новым вариантом.
Тем не менее, я вижу некоторое непонимание темы и потому считаю должным указать на некоторые ошибки в твоем прошлом коде
Код
    private function RotationMatrixToEuler takes MATRIX3 R returns VECTOR3
    
        local real x
        local real y
        local real z
        local real sy = SquareRoot(R.m11 * R.m11  +  R.m21 * R.m21)
     
        local boolean singular = sy < .000001 or sy == 0 // If
     
        if not singular then
        
            set x = Atan2(R.m32 , R.m33)
            set y = Atan2(-R.m31, sy)
            set z = Atan2(R.m21, R.m11)
        
        else
        
            set x = Atan2(-R.m23, R.m22)
            set y = Atan2(-R.m31, sy)
            set z = 0
            
        endif
        
        return VECTOR3.New_1(x, y, z)
    
    endfunction
Я не понимаю, как работает эта функция. В моем понимании, преобразование матрицы поворота в углы Эйлера происходит за счет обратного преобразования. То есть, чтобы преобразовать матрицу в Эйлер, необходимо знать как преобразуется Эйлер в матрицу, поскольку это обратные друг другу процессы. В новом примере я ее переписал.
Код
        set rotation.m11 = X.x
        set rotation.m12 = X.y
        set rotation.m13 = X.z
        
        set rotation.m21 = Y.x
        set rotation.m22 = Y.y
        set rotation.m23 = Y.z
        
        set rotation.m31 = Z.x
        set rotation.m32 = Z.y
        set rotation.m33 = Z.z
Здесь идет неверное назначение параметров матрицы. Дело в том, что матрица записывается следующим образом (из readme библиотеки Math)
m11 m12 m13
m21 m22 m23
m31 m32 m33
При этом, оси записываются слева направо, столбиками, то есть , ось X здесь, это m11, m21 и m31. Следовательно верной записью будет
Код
        set rotation.m11 = X.x
        set rotation.m21 = X.y
        set rotation.m31 = X.z
        
        set rotation.m12 = Y.x
        set rotation.m22 = Y.y
        set rotation.m32 = Y.z
        
        set rotation.m13 = Z.x
        set rotation.m23 = Z.y
        set rotation.m33 = Z.z
И самая ложная строка
        set rotation = MATRIX3.New_0()
Это создаст нулевую матрицу, то есть матрицу, все значения которой - нули. Базовая же матрица поворота, это единичная матрица, то есть матрица, чья главная диагональ состоит из единиц, а все остальное - нули.
Но это просто заметки, в текущей версии этих участков кода больше нет.

23

» WarCraft 3 / Способности Яда

Похожие вопросы:

ответ
там 2 баффа, для ближнего и дальнего боя. Ты поменял 1 из баффов, а другой не поменял, все дела.
Просто можно откопировать его в строке баффов и написать 2 раза.
ответ
Такие вопросы можно описать в теле ресурса в блоге. Здесь - не подходящее место.
ответ
Пункт " убить боевую единицу" отвечает за то сможет ли урон от яда убить Юнита, если флаг не установлен то у Юнита останется 1-2 хп. Но яд не может его убить.
Разумеется не работают яд. Стрелы на маг иммунитет, ибо это активный автокаст.
Чтобы автокаст стрелы работали на маг. Имун нужно чтобы способность относилась к герою, требуемый для изучения уровень был выше 1. Вот и все.

23

» WarCraft 3 / По текстурам

Похожие вопросы:

ответ
Maxsavin:
darkowlom, ну я сабжом расставил нужные текстуры. Из всего что пора пришло в голову только использовать триггер "Окружение" и в нужных местах областями ставить текстуры. Но это как муторно.. Вот и решил спросить можно ли обойти ограничения.
Это делается функциями GetTerrainType и SetTerrainType.
Рисуешь на тех же самых текстурах определенную допустим квадратную локацию.
Затем for стартовоеX до конечноеX внутри for СтартовоеY до КонечноеY если getterraintype = точтонадозаменить то setterraintype на другую текстуру.
Других адекватных методов нет. Триггер который ты привел использует локации (точки), а значит - это возня с точками - возможно утечки.
Я используя эти функ целиком всю карту стираю размера 256x256 и отрисовываю 10к тайлов, в одном проекте). Лаг если и есть во время перерисовки - то незаметный, не больше 0.5сек
ответ
~8gabriel8:
Идея!
В модели один слой, а можно выделить ветви и на новый слой их, а там уже можешь делать смещение без коверкания наложения текстуры.
Что-то с моделью этой, не получается провернуть указанную операцию, постоянно вылетает ошибка.
ответ
Насколько я понял, тебе нужно просто сменить текстуру. Для этого тебе по меньшей мере нужна текстура. Можно взять либо стандартную, либо создать самому (что довольно просто, если знать как).
Чтобы создать текстуру, возьми любое изображение, открой его в ФШ и сохрани как tga 32 бит с размером до 512х512 (вроде бы можно делать любой размер, не превышающий 1024х768, но я советую сохранять пропорции и делать размер не больше 512х512, или кратных половине этого числа (256/128/64/32) , за тем открой в War3 Image Extractor и переведи формат tga в blp. Потом открываешь модельку - редактор текстур и переименовываешь нужную текстуру в ту которая тебе нужна (они должны быть в одной папке) жмешь - Enter - .
ответ
~8gabriel8:
Смотри карту: xgm.guru/files/100/219921/comments/408338/0.w3x
Там для героев созданы их копии с другой моделью и нестандартные способности на основе способности Тёмный, которая заменяет юнита на указанного другого. Такой вариант не меняет имя героя, порядок предметов в инвентаре, кулдаун на предметах и способностях, но что-то упоминали ранее о возможных глюках с наложенными заклинаниями. Триггерно при использовании способности не на иллюзии героя добавляем ему нестандартную способность нужного типа.
Вариант с заменой юнита, примерно как ты описал, приведёт к сбросу имени, опыта, способностей, кулдаунов, предметов и заклинаний.
Вариантом морфа героя через руны не умею пользоваться.
Вариант с заменой текстуры персонажа через способность Вырвать дерево требует замены текстур деревьев в карте, а это плохо, так как героев много. Ещё это подразумевает умение работать с 3D-редакторами, которого, как предполагаю, у тебя нет.

23

» WarCraft 3 / Парящие острова

Похожие вопросы:

ответ
Stalker Freedom:
Meddin, тогда есть три выхода из ситуации:
  1. размести рынок в другом месте
  2. сделай ландшафт этого места с помощью инструмента "повысить на 1/на 2"
  3. замени рынку модель, к примеру, на некрополь (потому что он красиво парит, хотя можешь на что угодно другое, что выглядит в небе более менее эстетично) и сделай вид, что парящий высоко в небе некрополь с барыгой - это не баг, а фича
Кстати, у меня вот только что мыслышка возникла. А попробуй убрать рынку галочку с поля "является зданием", тем самым превратив его из здания в юнита. Может, хоть это поможет

23

» WarCraft 3 / Вариации декораций

Похожие вопросы:

ответ
Я только свои вместо стандарток делал все работало. Так что как вариант)
ответ
Объясню на примере AshenRocks (камни Ашенваля):
Папка с моделями: Doodads\Ashenvale\Rocks\AshenRock\
То, что в "Файл модели": Doodads\Ashenvale\Rocks\AshenRock\AshenRock
Пути моделей:
  • Doodads\Ashenvale\Rocks\AshenRock\AshenRock0.mdx
  • Doodads\Ashenvale\Rocks\AshenRock\AshenRock1.mdx
и так до
  • Doodads\Ashenvale\Rocks\AshenRock\AshenRock9.mdx
В поле вариации ставим 10, так как всего у нас 10 моделей.
Пробуй, думаю, что заработает.
ответ
Или удалять/создавать или (лучше, сложнее) сделать анимации.
ответ
~8gabriel8:
У декораций для вариаций есть несколько моделей с тем же именем и припиской: ...00, ...01, ...02... А в Редакторе объектов для модели указывается только имя без приписки. У башен же есть несколько вариаций анимации Stand, которые идут для Смотровой башни, Осадной башни, Стрелковой башни и Магической, странно, что у тебя отображает лишь Смотровую и Осадную. Запамятовал, можно ли триггером выставлять декорациям теги анимации, но если да, то добавляй тег Смотровой башни. Другой вариант - сделать в Редакторе объектов Боевую единицу Башню со способностью Москиты, чтобы она была невыбираема. Способность эту можно поставить через JNGP или выбрав строку со способностями, нажав Shift+Enter, напечатать Aloc.

23

» WarCraft 3 / Правильно ли я сделал

Похожие вопросы:

ответ
bazeba, чтобы мазохисты могли убирать часть утечек и таким образом и дальше заниматься мазохизмом
там ещё точка утекает
Position of () создаёт точку которая утекает
ответ
Sylvanas:
Да, но сами текстуры находятся в Terrainart/.../
Это похоже что варовские архивы надо обсматривать.
Sylvanas, я просмотрел архивы и вот что нашел: В архивах Вара (War3 и War3x) есть другие архивы, в их "корне" (они находятся вне папок). Эти архивы - маленькие (названы одной буквой). В них - текстуры клиффов для каждого вида местности. В папке "TerrainArt" (находится в War3 и в War3x) есть файл-таблица Excel: CliffTypes.slk - он содержит ссылки на клиффы. По-видимому, этот файл ссылается на клиффы внутри маленьких архивов, игра по этим ссылкам считывает их из малых архивов и воспроизводит в игре. Все эти клиффы в малых архивах имеют имена "Cliff1" и "Cliff0". Т.е., текстуры клиффов разных видов местности (которые непосредственно считываются Варом) имеют одинаковое имя И находятся как бы в разных "папках" (малые архивы внутри основного). Вот почему возник такой глюк с заменой одного файла.
ответ
~8gabriel8:
Hargeus, тут несколько вариантов возможно. Первым делом проверь пути к импортированным файлам, не оставил ли в пути к текстуре "war3Imported\", который обычно надо удалять?
Если с этим нормально, то текстура могла быть не прописана в модели, как указал Hate. Кидай модель и текстуру в одну папку без кириллицы в пути к ней, например, в корневую папку диска. Открываешь модель в w3me, нажимаешь Windows->Texture Manager, там щёлкаешь правой кнопкой мыши и в меню Import, указываешь свою текстуру. Потом открываешь Windows->Material Manager, где перебираешь все элементы списка в поисках текстуры, которую надо заменить, меняя её на свою. Либо создаёшь новый Material со своей текстурой, а далее в Geoset Manager перебором подставляешь свой материал на место других и обратно, пока не найдёшь нужную поверхность.
Если получилось всё нормально, то сохраняй, если что-то не вышло, либо в игре всё равно лишь тень модели, то приложи сюда карту с моделью, посмотреть в чём дело может быть.
ответ
~8gabriel8:
Только вечером, как приду с работы.
UI\Widgets\EscMenu\Human\human-options-menu-border.blp
UI\Widgets\EscMenu\Human\human-options-menu-background.blp
Шрифты

23

» WarCraft 3 / Приоритет атаки

Похожие вопросы:

ответ
В редакторе объектов: Характеристики - Приоритет (число).
Юнитов с высоким приоритетом атакуют в первую очередь.
ответ
8gabriel8, приоритет менять нельзя
стандартный ии использует это поле для контроля юнитов
пишем свой ии в котором вместо приоритета юзаем свою переменную которой можем задавать любое значение
8gabriel8:
Но для меня это путь в Москву через Владивосток
ну если между тобой и Москвой находится Владивосток то иначе никак(а вар3 как раз расположен за Владивостоком)
ответ
~2Serious4Die:
avuremybe, я уже впринципе нормально их знаю, но не знаю как лучше реализовать подобное.
Нашел решение. На событие боевая единица умирает выбирать врагов в диапазоне откидывая тех кого невидно и атаковать случайного из них.
ответ
Так ты дай юниту 2 атаки и глянь, какие он использует на какой дистанции.

23

» WarCraft 3 / Мемхак

Похожие вопросы:

ответ
	//globals
	integer array VariousFramesAddresses
	constant integer GOLD_TEXTFRAME_ADDRESS_INDEX=1
	constant integer LUMBER_TEXTFRAME_ADDRESS_INDEX=2
	constant integer UPKEEP_TEXTFRAME_ADDRESS_INDEX=3
	constant integer SUPPLY_TEXTFRAME_ADDRESS_INDEX=4

//memhack init
	set pGetFrameTextAddress = GameDLL + 0x61C7B0
	
function GetFrameTextAddress takes string name, integer id returns integer
	return CallFastCallWith2Args(pGetFrameTextAddress, GetStringAddress(name), id)
endfunction

function GetResourceBarsAddresses takes nothing returns nothing
	local integer a=GetFrameTextAddress("ResourceBarGoldText",0)
	if a>0 then
		set VariousFramesAddresses[GOLD_TEXTFRAME_ADDRESS_INDEX]=a
	endif
	set a=GetFrameTextAddress("ResourceBarLumberText",0)
	if a>0 then
		set VariousFramesAddresses[LUMBER_TEXTFRAME_ADDRESS_INDEX]=a
	endif
	set a=GetFrameTextAddress("ResourceBarSupplyText",0)
	if a>0 then
		set VariousFramesAddresses[SUPPLY_TEXTFRAME_ADDRESS_INDEX]=a
	endif
	set a=GetFrameTextAddress("ResourceBarUpkeepText",0)
	if a>0 then
		set VariousFramesAddresses[UPKEEP_TEXTFRAME_ADDRESS_INDEX]=a
	endif
		
endfunction

call CallThisCallWith2Args(GameDLL+0x60CA10,VariousFramesAddresses[UPKEEP_TEXTFRAME_ADDRESS_INDEX],GetStringAddress("random str "+I2S(GetRandomInt(1,2000))))
ответ
вылетает при поиске имени переменной, возможно создаются строки из байт (ConvertString че-то там) неверным путём
ответ
DracoL1ch:
офсет 2589 *4 , я ж только что сказал
Всё, немного поковырявшись у меня получилось, нужно было еще (id * 4) еще раз умножить на 4. Теперь строки извлекает идеально.
Если кому-то интересно, выглядит это вот так:
	DWORD ReadPointer(DWORD addr)
	{
		return *(DWORD*)(addr);
	}

	DWORD GetJassContext(int id)
	{
		DWORD pJassEnvAddress = DWORD(GetModuleHandle(TEXT("Game.dll"))) + 0xADA848;
		return ReadPointer(ReadPointer(ReadPointer(ReadPointer(pJassEnvAddress) + 0x14) + 0x90) + id * 4);
	}

	DWORD GetStringTable()
	{
		DWORD pJassContext = GetJassContext(1);
		return ReadPointer(ReadPointer(pJassContext + 0x2874) + 0x8);
	}

	std::string from_jString(jString jstrHandle)
	{
		DWORD pStringTable = GetStringTable();
		const char* sptr = (const char*)ReadPointer(ReadPointer(pStringTable + ((jstrHandle * 4)*4) + 0x8) + 0x1C);
		return sptr;
	}
ответ
Ну содержимое у restore само собой разное, в детекте урона новый хук на выход, вам нужна функция загрузки библиотеки?
Это же дело над:

function LoadLibrary takes string nDllName returns integer
    if pLoadLibraryA == 0 then
        set pLoadLibraryA = GetModuleProcAddress("Kernel32.dll", "LoadLibraryA" )
    endif
    if pLoadLibraryA != 0 then
        return CallStdcallWith1Args(pLoadLibraryA,GetStringAddress(nDllName))
    endif
 
    return 0
endfunction

23

» WarCraft 3 / Передвижение

Похожие вопросы:

ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь
ответ
Никак нельзя отключить ИИ нейтральных игроков, ваще никак! Один и тот же вопрос бля каждую неделю.
Не используйте нейтралов в качестве ходячих и атакующих крипов, не оберётесь багов.
Насчет умных - а как в доте сделано, а там это сделано только когда играют обсервы + там пипец много костылей или багов, вроде реаз в 3 делать каждому юниту -SetUnitPosition в его текущие координаты, полностью тригггерный ии башен и автоатаки крипов (это внезапно еще и ресурсоёмко).
ответ
Steal nerves:
а почему так? отравленное оружие настраивает на сколька понизить в %. а сколько не ставь, все одно. мб что-то не правильное. абилка что ли бракованная

все врубился, понял формулу:
скорость = Текущая скорость - (Текущая скорость * процент снижения)
слишком большие проценты ставил, в результате не видел, и выходило ниже скорость. А так как стоят ограничения в скорости (мин = 150, макс = 400 в константах), то упиралась в минималку, и не видел изменения, из-за чего ошибочно начал теории строить.

в абилках "отравленное оружие" и "яд" дриады - поля "Данные - Фактор скорости атаки" и "Данные - Фактор скорости перемещения" - перепутаны, в "фактор скорости атаки" указывают понижение в процентах скорости движения, а в "фактор скорости перемещения" указывают понижение в процентах скорости атаки .
ответ
Вопрос решён. Оказывается это всё из-за моей тупости и из-за того, что чем больше войск заливается, тем меньше урона каждый из них получает. Если тестить по одному футмену, то урон нормальный, а если тестить группу, то урон уменьшается.

23

» WarCraft 3 / Анимации портрета

Похожие вопросы:

ответ
Лучше проверить, присоединён ли он к тем же костям, что и соседние вершины. Если нет — присоединить. Если да, то как сказали Melissa и nvc123.
ответ
Katrusska:
Если нужна карта, то могу скинуть :)
Но, думаю, что проблема не в ней, да и мой "суперпроект" раскрывать не хотелося.
Повтори действие наново, удали нестандартную модель, переназначь модель орудийного расчета и вообще всегда делай копии своей карты, а вообще делай эксперементы в разних картах а то что получилось лишь тогда пихай в карту....
ответ
держи
ответ
Ладно будем надеяться что кто-то что-то придумает.
ответ
8gabriel8, Вот, упрямый ведь! Берёшь скачиваешь свою модель, которую ты кинул в топик, рассчитываешь границы, импортируешь, для точности в новую карту 32x32 и если после этого портрет невидим, я в блоге напишу, что я гей. Конечно при условии, что ты все правильно сделаешь.

23

» WarCraft 3 / Благословение Элуны

Похожие вопросы:

ответ
Хозяин Миров:
Если нужно, чтобы было 2 в одном, то, думаю, тут надо чуток триггеров, надо сделать 2 способности, одну из которых скрыть, а другой дать всё описание. И запускать вторую триггером, через событие запуска заклинания.
ответ
Нет, далеко не все фишки и особенности известны. Все способности описаны в движке игры, защита от магии горного великана это клон множества абилок защиты от магии, главная их суть - выдать классификацию герой юниту. Т.е после появления этой способности горный великан становится героем и его нельзя полиморфить, переманивать и так далее.
Применять на маг имунных можно только высшие заклинание - т.е только геройские, у который требование к уровню выше 1, в до целях уязвимые\неуязвимые.